}
//------------------------------------------------------------------------
-static QString optionDate(const QDateTime& dt, bool useLocal)
+static QString optionDate(const QDateTime& dt)
{
- QDateTime d;
- if (useLocal) {
- d = dt.toLocalTime();
- } else {
- d = dt.toUTC();
- }
+ QDateTime d = dt.toUTC();
QDate date = d.date();
QTime time = d.time();
}
if (start) {
- s += QString(",start=%1").arg(optionDate(startTime, TZ));
+ s += QString(",start=%1").arg(optionDate(startTime));
}
if (stop) {
- s += QString(",stop=%1").arg(optionDate(stopTime, TZ));
+ s += QString(",stop=%1").arg(optionDate(stopTime));
}
if (move) {
s += QString(",move=%1w%2d%3h%4m%5s").arg(weeks).arg(days).arg(hours).arg(mins).arg(secs);
//
#include "filterwidgets.h"
-#include <limits>
+
+#include <assert.h> // for assert
+#include <limits> // for numeric_limits
+
+#include <QChar> // for QChar
+#include <QCheckBox> // for QCheckBox
+#include <QEvent> // for QEvent, QEvent::LocaleChange
+#include <QLabel> // for QLabel
+#include <QRadioButton> // for QRadioButton
+#include <Qt> // for LocalTime, UTC
//------------------------------------------------------------------------
connect(ui.splitTimeCheck, &QAbstractButton::clicked, this, &TrackWidget::splitTimeX);
connect(ui.splitDistanceCheck, &QAbstractButton::clicked, this, &TrackWidget::splitDistanceX);
+ connect(ui.TZCheck, &QAbstractButton::clicked, this, &TrackWidget::TZX);
+
ui.startEdit->setDisplayFormat("dd MMM yyyy hh:mm:ss AP");
ui.stopEdit->setDisplayFormat("dd MMM yyyy hh:mm:ss AP");
+ assert(tfd.startTime.timeSpec() == tfd.stopTime.timeSpec());
+ assert((tfd.startTime.timeSpec() == Qt::UTC) || (tfd.startTime.timeSpec() == Qt::LocalTime));
+ // Qt5 QDateTimeEdit::setDateTime ignored the passed QDateTime::timeSpec.
+ // Qt6 QDateTimeEdit::setDateTime will convert the passed QDateTime if the passed
+ // QDateTime::timeSpec doesn't match QDateTimeEdit::timeSpec.
+ // If the two timeSpecs match Qt5 and Qt6 behave the same.
+ ui.startEdit->setTimeSpec(tfd.startTime.timeSpec());
+ ui.stopEdit->setTimeSpec(tfd.stopTime.timeSpec());
+ // Force TZ data to be in sync with startTime & stopTime time spec.
+ // This makes sure the initial state of the TZCheck box is in agreement
+ // with the startTime::timeSpec and stopTime::timeSpec.
+ tfd.TZ = tfd.startTime.timeSpec() == Qt::LocalTime;
+
// Collect the data fields.
fopts << new BoolFilterOption(tfd.title, ui.titleCheck);
fopts << new BoolFilterOption(tfd.move, ui.moveCheck);
}
otherCheckX();
}
+//------------------------------------------------------------------------
+void TrackWidget::TZX()
+{
+ if (ui.TZCheck->isChecked()) {
+ ui.startEdit->setTimeSpec(Qt::LocalTime);
+ ui.stopEdit->setTimeSpec(Qt::LocalTime);
+ } else {
+ ui.startEdit->setTimeSpec(Qt::UTC);
+ ui.stopEdit->setTimeSpec(Qt::UTC);
+ }
+ // Force update of Edit displays, so the displayed
+ // datetimes are in sync with the specified time spec.
+ auto ev = QEvent(QEvent::LocaleChange);
+ ui.startEdit->event(&ev);
+ ui.stopEdit->event(&ev);
+}
//------------------------------------------------------------------------
#ifndef FILTERWIDGETS_H
#define FILTERWIDGETS_H
+#include <QAbstractButton> // for QAbstractButton
+#include <QComboBox> // for QComboBox
+#include <QDateTime> // for QDateTime
+#include <QDateTimeEdit> // for QDateTimeEdit
+#include <QDoubleValidator> // for QDoubleValidator
+#include <QFunctionPointer> // for qMax, qMin
+#include <QLineEdit> // for QLineEdit
+#include <QList> // for QList
+#include <QObject> // for QObject, Q_OBJECT, slots
+#include <QSpinBox> // for QSpinBox
+#include <QString> // for QString
+#include <QWidget> // for QWidget
+
+#include "filterdata.h" // for MiscFltFilterData, RtTrkFilterData, TrackFilterData, WayPtsFilterData
+#include "ui_miscfltui.h" // for Ui_MiscFltWidget
+#include "ui_rttrkui.h" // for Ui_RtTrkWidget
+#include "ui_trackui.h" // for Ui_TrackWidget
+#include "ui_wayptsui.h" // for Ui_WayPtsWidget
-#include "ui_trackui.h"
-#include "ui_wayptsui.h"
-#include "ui_rttrkui.h"
-#include "ui_miscfltui.h"
-#include "filterdata.h"
-class CheckEnabler;
-class FilterOption;
//------------------------------------------------------------------------
class CheckEnabler: public QObject
{
void splitDateX();
void splitTimeX();
void splitDistanceX();
+ void TZX();
void packCheckX();
};